/**
 * @file ecfp.h
 * @brief 实现在素数域的椭圆曲线运算
 * @license BSD
 */

#ifndef SM_ECFP_H
#define SM_ECFP_H

#include "uinteger.h"
#include "ec.h"

#ifdef __cplusplus
extern "C" {
#endif

/** y^2 = x^3 + a*x + b mod p */
typedef struct ECFpWork_st {
	ECWork_HEAD;
	UInteger m;
	UInteger a;		//!< 椭圆曲线参数
	UInteger b;		//!< 椭圆曲线参数
} ECFpWork;


/**
 * 初始化椭圆曲线，设置椭圆曲线参数
 * @param [in] m 椭圆曲线的模
 * @param [in] a,b 椭圆曲线参数，参考《总则》3.2.1
 */
void ECFp_Initialize(ECFpWork *ec, size_t size, const uint8_t *m, const uint8_t *a, const uint8_t *b);

#ifdef __cplusplus
}	// extern "C" {
#endif

#endif // SM_ECFP_H

